import { PlaylistApi } from "@/lib/api";
import { DefaultMapper } from "@/lib/constants";

/**
 * 在具有 Midi ID 的上下文中执行某些操作
 * @param url Midi 文件路径
 * @param processor 执行器
 * @param errorProcessor 错误处理器（可选）
 */
export async function inMidiIdContext(
    url: string,
    processor: (id: string) => Promise<void>,
    errorProcessor?: (error: any) => Promise<void>,
) {
    // Midi 文件的 ID
    let id: string | undefined = undefined;

    try {
        // 打开 Midi 文件
        id = await PlaylistApi.open(DefaultMapper, url);
        // 执行操作
        await processor(id);
    } catch (error) {
        // 进行错误处理
        await errorProcessor?.(error);
    } finally {
        // 如果 Midi 文件已经打开
        if (id !== undefined) {
            // 则关闭 Midi 文件
            await PlaylistApi.close(id);
        }
    }
}
